#include<iostream>
#include<queue>
#include<string>
using namespace std;
int map1[20][20];
int fx[8]={1,1,-1,-1,2,2,-2,-2};
int fy[8]={2,-2,2,-2,1,-1,1,-1};
string mb="1111101111002110000100000";
int dep;
int h(){
    int x=0;
    for(int i=0;i<5;i++){
        for(int j=0;j<5;j++){
            x+=(map1[i+1][j+1]!=(mb[5*i+j]-'0'));
        }
    }
    return x;
}
int flag=0;
void dfs(int g,int x,int y){
    if(g==dep){
        if(!h()){
            flag=1;
        }
        return;//在这里输出的话会输出8个方向
    }
    for(int i=0;i<8;i++){
            int nx=x+fx[i];
            int ny=y+fy[i];
           if(nx>5||ny>5||nx<1||ny<1)continue;
            swap(map1[x][y],map1[nx][ny]);
            if(g+h()<=dep) dfs(g+1,nx,ny);
            swap(map1[x][y],map1[nx][ny]);
    }
}
int main(){
    int n;
       int sx;
        int sy;
    cin>>n;
    for(int k=1;k<=n;k++){
        flag=0;
        for(int i=1;i<=5;i++){
        for(int j=1;j<=5;j++){
            char a;
            cin>>a;
            if(a=='*'){
                map1[i][j]=2;
                sx=i;
                sy=j;
            }
            else map1[i][j]=a-'0';
        }
    }
    for(dep=0;dep<=15;dep++){
        dfs(0,sx,sy);
        if(flag){
            cout<<dep<<endl;
            break;
        }
    }
    if(!flag)cout<<-1<<endl;
    // for(int i=1;i<=5;i++){
    //     for(int j=1;j<=5;j++){
    //         cout<<map[i][j];
    //     }
    //     cout<<endl;
    // }
    // cout<<endl;
    }
    return 0;
}